<?php

namespace Modules\Admin\Models;
use Illuminate\Support\Facades\DB;
class AuthRule extends BaseModel
{
	/**
	 * @name  递归排序
	 * @return 返回权限数据
	 */
	public function lefts(){
		$cate = DB::table('auth_rules')->orderBy('sort','asc')->get();
		return $this->menu($cate);
	}
	/**
	 * @name  使用递归方法
	 * @param data 数据
	 * @param lefthtml 上下级分割标识
	 * @param pid pid默认值
	 * @param leftpin 默认级别0
	 * @return 返回权限数据
	 */
	private function menu($cate , $lefthtml = '|— ' , $pid=0 , $lvl=0, $leftpin=0 ){
		static $arr=array();
		foreach ($cate as $v){  
			if($v->pid == $pid){
				$v->lvl = $lvl + 1;
				$v->leftpin = $leftpin + 0;
				$v->lefthtml = str_repeat($lefthtml,$lvl);
				$v->ltitle = $v->lefthtml.$v->title;
				$arr[]=$v;
				$this->menu($cate,$lefthtml,$v->id, $lvl+1 ,$leftpin+20);
			}
		}
		return $arr;
	}
	/**
	 * @name  删除
	 * @param id 当前删除数据id
	 * @return 返回删除结果
	 */
	public function rule_delete($id,$url){
		$arr = $this->dels($id);
		$arr[] = (int)$id;
		return $this->common_destroy($arr,$url);
		 
	}
	/**
	 * @name  获取id
	 * @param id 当前删除数据id
	 * @return 返回获取当前的删除id的其他子id
	 */
	//
	private function dels($id){
		$cate = DB::table('auth_rules')->get();
		return $this->delsort($cate,$id);
	}
	/**
	 * @name  递归遍历数据
	 * @param cate 全部数据
	 * @param id 当前删除数据id
	 * @return 返回获取当前的删除id的其他子id
	 */
	private function delsort($cate,$id){
		//创建新数组
		static $arr=array();
		foreach($cate as $v){
			if($v->pid == $id){
				$arr[] = $v->id;
				$this->delsort($cate,$v->id);
			}
		}
		return $arr;
	}
	/**
	 * @name  权限配置规则
	 * @return 返回权限列表信息
	 */
	//
	public function auth_list($rules){
		$admin_rule = $this->where(['auth_open'=>1])->orderBy('sort','asc')->get();
        return $this->auth($admin_rule,$pid=0,$rules);
	}
	//参数1：权限列表信息
	//参数2：pid =0 顶级权限  
	//参数3：现在已拥有权限列表
	private function auth($cate , $pid=0,$rules){
		//创建数据
        static $arr=array();
		//把已拥有的权限转换为数组
        $rulesArr = explode('|',$rules);
		//便利所有数据
        foreach ($cate as $v){
			//判断顶级目录
            if($v->pid == $pid){
				$a = [];
				//判断该目录是否在拥有列表中存在
                if(in_array($v->id,$rulesArr)){
					//给它默认选中
                    $a['checked']=true;
                }
				//表示打开状态
                $a['open']=true;
                $a['title']=$v->title;
                $a['pid']=$v->pid;
                $a['id']=$v->id;
				//放入新数组
                $arr[] = $a;
				//自调用  找出下级
                $this->auth($cate, $v->id,$rules);
            }
        }
        return $arr;
    }
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
